package com.example.wheather;
import android.content.Context;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class JsonParse {
    private static JsonParse instance;
    //私有的构造方法
    private  JsonParse(){
    }
    //公共的构造方法getInstance(),必须是静态的，通过类名调用，用于创建单实例对象
    public static JsonParse getInstance(){
        if(instance==null){
            instance=new JsonParse();
        }
        return  instance;
    }
    //将获取的数据流转换为JSON数据
    private String read(InputStream in){
        BufferedReader reader=null;     //声明一个BufferedReader对象
        StringBuilder sb=null;          //声明一个StringBuilder对象
        String line=null;               //声明一个字符串
        try {
            sb=new StringBuilder();     //实例化一个StringBuilder对象
            reader=new BufferedReader(new InputStreamReader(in));  //实例化reader
            while((line=reader.readLine())!=null){                 //读一行，如果不是null
                sb.append(line);           //将读到的一行追加到sb对象
                sb.append("\n");           //添加换行符
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(in!=null)in.close();
                if(reader!=null)reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }
    //解析json文件返回天气信息的集合
    public List<WeatherInfo> getInfosFromJson(Context context){
        List<WeatherInfo> weatherInfos=new ArrayList<>();
        InputStream is=null;
        try {
            is=context.getResources().getAssets().open("weather.json");
            String json=read(is);
            Gson gson=new Gson();
            //Type是接口，TypeToken是类，获取List<WeatchInfo>中泛型的类型，供解析用
            Type listType =new TypeToken<List<WeatherInfo>>(){}.getType();
            List<WeatherInfo> infoList=gson.fromJson(json,listType);
            return infoList;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return weatherInfos;
    }
}
